#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<stdio.h>
int main(){
	int fd1,fd2;
	char buf[] = "sujingxin";
	char tmp[4];
	char header[3] = {0xef, 0xbb, 0xbf};  // UTF-8 file header
	fd1 = open("demo.txt",O_RDWR|O_CREAT|O_TRUNC);
	/*
	O_RDONLY 只读打开
	O_WRONLY 只写打开
	O_RDWR 读写打开
	O_APPEND 每次写时都加到文件的尾端
	O_CREAT 若此文件不存在则创建它
	O_EXCL 测试文件是否存在，配合O_CREAT
	O_TRUNC 如果存在，而且只读或者只写，则长度变为0
	O_SYNC 使得每次write都等到物理I/O完成
	*/
	if(fd1<0){
		printf("无法打开文件\n");
		exit(EXIT_FAILURE);
	}
	if(write(fd1,buf,8) != 8){
		printf("无法写入文件\n");
		exit(EXIT_FAILURE);
	}else{
		// 打开成功
		printf("向文件中写入了%s\n",buf);
	}
	fd2 = open("demo.txt",O_RDWR);
	/*
	O_RDONLY 只读打开
	O_WRONLY 只写打开
	O_RDWR 读写打开
	O_APPEND 每次写时都加到文件的尾端
	O_CREAT 若此文件不存在则创建它
	O_EXCL 测试文件是否存在，配合O_CREAT
	O_TRUNC 如果存在，而且只读或者只写，则长度变为0
	O_SYNC 使得每次write都等到物理I/O完成
	*/
	if(fd2<0){
		printf("无法打开文件\n");
		exit(EXIT_FAILURE);
	}
	lseek(fd1,0,SEEK_SET);
	//移动文件的读写位置，第二个参数是参照第三个的偏移量
	if(read(fd1,tmp,4)!=4){
		printf("无法从fd1中读取\n");
		exit(EXIT_FAILURE);
	}else{
		printf("fd1:%s",tmp);
	}
	if(read(fd2,tmp,4)!=4){
		printf("无法从fd2中读取\n");
		exit(EXIT_FAILURE);
	}else{
		printf("fd2:%s",tmp);
	} 
	close(fd1);
	close(fd2);
	return 0;
}